var gulp = require('gulp');
var concat = require('gulp-concat');  // 合并
var uglify = require('gulp-uglify');  // 压缩
var rename = require('gulp-rename');  // 重命名
var jshint = require('gulp-jshint');  // 注意需要同时安装 jshint
var minifycss = require('gulp-minify-css'); // 压缩css文件
var watch  = require('gulp-watch'); // 监听文件
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
var config = require('./config/config');

gulp.task('dev', config.frontend.dev_task, function () {
  console.log('task dev');
  // start server
  require('./server');
});

gulp.task('prod', config.frontend.prod_task, function () {
  console.log('task prod');
});

// 读取config.frontend里面页面的配置,为每一个页面生成一个特定的task任务
config.frontend.page_list.forEach(function(item) {
  gulp.task(item.pageName, function() {
    handleCommonTask(item.entryDir, item.outputDir, item.pageName);
  });
});

// 压缩公共js
gulp.task('handle_common_js', function() {
  gulp.src(config.frontend.common_js_src_dir)
    .pipe(gulp.dest(config.frontend.common_js_output_dir))
    .pipe(uglify())
    .pipe(rename({ suffix: '.min' }))
    .pipe(gulp.dest(config.frontend.common_js_output_dir));
});

// 压缩公共css
gulp.task('handle_common_css', function() {
  gulp.src(config.frontend.common_css_src_dir)
    .pipe(gulp.dest(config.frontend.common_css_output_dir))
    .pipe(rename({ suffix: '.min' }))
    .pipe(minifycss())
    .pipe(gulp.dest(config.frontend.common_css_output_dir));
});

// 代理
gulp.task('watch-client', function () {
    var file_list = config.frontend.watch_list;
    browserSync.init({
        proxy: config.frontend.watch_client_proxy
    });
    gulp.watch(file_list).on('change', function() {
      config.frontend.rebuild_list.forEach(function(item) {
        handleCommonTask(item.entryDir, item.outputDir, item.preName);
      });
      reload();
    });
    console.log('run task watch-client...........');
});

// 公共任务函数 
function handleCommonTask(inputDir, outputDir, preName) {
  gulp.src(inputDir + '*.js')
    // .pipe(concat(preName + '.js'))
    .pipe(gulp.dest(outputDir))
    .pipe(uglify())
    .pipe(rename({ suffix: '.min' }))
    .pipe(gulp.dest(outputDir));

  gulp.src(inputDir + '*.css')
    .pipe(concat(preName + '.css'))
    .pipe(gulp.dest(outputDir))
    .pipe(rename({ suffix: '.min' }))
    .pipe(minifycss())
    .pipe(gulp.dest(outputDir));
}
